export class TripleDESCrypto {
  private key: string
  private keyWordArray: CryptoJS.lib.WordArray

  constructor(key: string) {
    // 验证密钥长度 (3DES需要24字节密钥,否则会报错)
    if (!key || key.length < 24) {
      throw new Error('3DES密钥长度至少需要24个字符')
    } else {
      this.key = key.substring(0, 24)
      // 将密钥转换为WordArray
      this.keyWordArray = CryptoJS.enc.Utf8.parse(this.key)
    }
  }
  /**
   * 3DES加密
   * @param plaintext 明文
   * @returns 加密后的密文
   */
  encrypt(plaintext: string) {
    const encrypted = CryptoJS.TripleDES.encrypt(plaintext, this.keyWordArray, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7,
    })
    return encrypted.toString()
  }
  /**
   * 3DES解密
   * @param ciphertext 密文
   * @returns 解密后的明文
   */
  decrypt(ciphertext: string) {
    const decrypted = CryptoJS.TripleDES.decrypt(ciphertext, this.keyWordArray, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7,
    })
    return decrypted.toString(CryptoJS.enc.Utf8)
  }
}
